/**
 * CubeMX 参数说明:
 * 1. FMC->SDRAM1
 * 2. (SDCKE0+SDNE0) (4 banks) (13 bits) (16bits) (Disable)
 * 3. 3 Dis 2 En 1
 * 4. 2 8 6 6 4 2 2
 */

/**
 * DMA2D 寄存器说明
 * HAL库不方便修改行偏移地址且据说有性能影响
 * 
 * 填充相关: (需要设置位 Reg to Memory 模式)
 * 1. NLR: [29:16] 高度 [15:0] 宽度
 * 2. OMAR: 起始地址
 * 3. OCOLR: 颜色数据
 * 4. CR: [17:16] 模式 [0] 开始传输
 * 5. OOR: [13:0] 行偏移
 */

#ifndef RGB_LCD_H
#define RGB_LCD_H

#include "main.h"

#define IIC_SCL(x) HAL_GPIO_WritePin(GPIOH, GPIO_PIN_6, x ? GPIO_PIN_SET : GPIO_PIN_RESET)
#define IIC_SDA(x) HAL_GPIO_WritePin(GPIOI, GPIO_PIN_3, x ? GPIO_PIN_SET : GPIO_PIN_RESET)
#define CT_READ_SDA HAL_GPIO_ReadPin(GPIOI, GPIO_PIN_3)

/* IIC读写命令 */
#define GT9XXX_CMD_WR       0X28        /* 写命令 */
#define GT9XXX_CMD_RD       0X29        /* 读命令 */

/* GT9XXX 部分寄存器定义  */
#define GT9XXX_CTRL_REG     0X8040      /* GT9XXX控制寄存器 */
#define GT9XXX_GSTID_REG    0X814E      /* GT9XXX当前检测到的触摸情况 */
#define GT9XXX_TP1_REG      0X8150      /* 第一个触摸点数据地址 */

extern uint16_t touch_x, touch_y;

#if defined __cplusplus
extern "C" {
#endif

// 在指定区域内填充指定颜色块, DMA2D填充
void rgb_colors_fill(uint16_t start_x, uint16_t start_y, uint16_t end_x, uint16_t end_y, uint16_t *color);

// 初始化触摸屏
void touchInit();

// 扫描一次触摸屏 若按下 则返回true 且修改 x y 的值
bool scan();

#if defined __cplusplus
}
#endif

#endif // RGB_LCD_H